/**
 * 接受vue实例,注入vuex
 */
export default function (Vue) {
  //版本号,不同的版本注入方式不同
  const version = Number(Vue.version.split('.')[0]);
  //2.x.x以上版本,可以使用 hook 的形式进行注入
  if (version >= 2) {
    //在Vue静态属性中有没有init方法
    const usesInit = Vue.config._lifecycleHooks.indexOf('init') > -1
    //传入vuexinit方法
    Vue.mixin(usesInit ? { init: vuexInit } : { beforeCreate: vuexInit })
  } else {
    //使用封装并替换Vue对象原型的_init方法，实现注入
    // 覆盖init和注入vuex init程序
    // 对于1.x向后兼容性。
    // const _init = Vue.prototype._init
    // Vue.prototype._init = function (options = {}) {
    //   options.init = options.init
    //     ? [vuexInit].concat(options.init)
    //     : vuexInit
    //   _init.call(this, options)
    // }
  }
}
//这里是注入store,子组件从其父组件引用$store属性,层层嵌套进行设置,所有组件就会有store
function vuexInit () {
  //这里this就是vue实例
  const options = this.$options;
  //判断是否挂载
  if (options.store) {
    this.$store = options.store
  } else if (options.parent && options.parent.$store) {
    this.$store = options.parent.$store
  }
}